package persistencia;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.Vector;

import Model.Cliente;

public class AdministradorPersistenciaCliente {
	private static AdministradorPersistenciaCliente instancia;
	
	private AdministradorPersistenciaCliente(){
		
	}
	
	public static AdministradorPersistenciaCliente getInstancia(){
		if(instancia == null)
			instancia = new AdministradorPersistenciaCliente();
		return instancia;
	}
	
	public void insert(Cliente c){
		Connection con = PoolConnection.getPoolConnection().getConnection();
		String sentencia = "INSERT INTO Clientes(dni,nombre,apellido,direccion,telefono, email) VALUES(?,?,?,?,?,?)";
		try {
			PreparedStatement ps = con.prepareStatement(sentencia);
			ps.setString(1, c.getDni());
			ps.setString(2, c.getNombre());
			ps.setString(3, c.getApellido());
			ps.setString(4, c.getDireccion());
			ps.setString(5, c.getTelefono());
			ps.setString(6, c.getEmail());
			
			ps.execute();
			
			PoolConnection.getPoolConnection().releaseConnection(con);
		} catch (SQLException e) {
			
			e.printStackTrace();
		}
	}
	
	public void update(Cliente c){
		Connection con = PoolConnection.getPoolConnection().getConnection();
		String sentencia = "UPDATE Clientes SET nombre = ?, apellido = ?, direccion = ?, telefono = ?, email = ? WHERE dni = ?";
		try {
			PreparedStatement ps = con.prepareStatement(sentencia);
			ps.setString(1, c.getNombre());
			ps.setString(2, c.getApellido());
			ps.setString(3, c.getDireccion());
			ps.setString(4, c.getTelefono());
			ps.setString(5, c.getEmail());
			ps.setString(6, c.getDni());
			
			ps.execute();
			
			PoolConnection.getPoolConnection().releaseConnection(con);
		} catch (SQLException e) {
			
			e.printStackTrace();
		}
	}
	
	public void delete(String dni){
		Connection con = PoolConnection.getPoolConnection().getConnection();
		String sentencia = "UPDATE Clientes SET baja = 1 WHERE dni = ?";
		
		try {
			PreparedStatement ps = con.prepareStatement(sentencia);
			ps.setString(1, dni);
			ps.execute();
			
			PoolConnection.getPoolConnection().releaseConnection(con);
		} catch (SQLException e) {
			e.printStackTrace();
		}
	}
	
	public Cliente buscar(String dni){
		String nombre = "";
		String apellido = "";
		String direccion = "";
		String telefono = "";
		String email = "";
		
		Connection con = PoolConnection.getPoolConnection().getConnection();
		String sentencia = "SELECT * FROM Clientes WHERE dni = ?";
		
		try {
			PreparedStatement ps = con.prepareStatement(sentencia);
			ps.setString(1, dni);
			
			ResultSet result = ps.executeQuery();
			while(result.next()){
				nombre = result.getString("nombre");
				apellido = result.getString("apellido");
				direccion = result.getString("direccion");
				telefono = result.getString("telefono");
				email = result.getString("email");
			}
			
			Cliente c = new Cliente(nombre,apellido,dni,direccion,telefono,email);
			c.setLineas(AdministradorPersistenciaLinea.getInstancia().buscarLineasCliente(dni));
			return c;
		} catch (SQLException e) {
			e.printStackTrace();
			return null;
		}
	}

	public Vector<Cliente> buscarTodos() {
		Vector<Cliente> clientes = new Vector<Cliente>();
		Connection con = PoolConnection.getPoolConnection().getConnection();
		String sentencia = "SELECT TOP(10) * FROM Clientes";
		
		try {
			PreparedStatement ps = con.prepareStatement(sentencia);
			ResultSet result = ps.executeQuery();
			while(result.next()){
				String nombre = result.getString("nombre");
				String apellido = result.getString("apellido");
				String dni = result.getString("dni");
				String direccion = result.getString("direccion");
				String telefono = result.getString("telefono");
				String email = result.getString("email");
				Cliente cliente = new Cliente(nombre,apellido,dni,direccion,telefono,email);
				cliente.setLineas(AdministradorPersistenciaLinea.getInstancia().buscarLineasCliente(dni));
				clientes.add(cliente);
			}
			
			result.close();
			PoolConnection.getPoolConnection().releaseConnection(con);
			return clientes;
		} catch (SQLException e) {
			e.printStackTrace();
			return null;
		}
		
	}
}
